package com.tedu.api.list;

import org.junit.Test;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 * List子接口---两个实现类
 * ArrayList实现类：数组实现---查询快，增删慢---使用集合【查询效率高】
 *
 * 链表实现集合
 * LinkedList实现类：双向链表实现---查询慢，增删快
 *
 * ArrayList实现类与LinkedList实现类大部分方法完全一致
 * 添加add() 删除remove() 获取get()
 * 获取集合长度()清空集合()
 *ArrayList实现类与LinkedList实现类大部分方法不一致
 * 方法补充：indexOf() lastIndexOf()
 * addFirst(E e)
 * addFast(E e)
 * removeFirst()
 * removeFast()
 */
public class LinkedListAPI {
    /**  ArrayList/LinkedList  LinkedListAPI
     * *方法补充：indexOf() lastIndexOf()
     *
     */
    @Test
    public void testIndexOf(){
        List<String> listlinked=new LinkedList<String>();
        listlinked.add("三只");
        listlinked.add("龙虎斗");
        listlinked.add("庵汤");
        listlinked.add("螺狮粉");
        /**补充方法
         * List子接口的方法--ArrayList LinkedList 均可以使用
         * indexOf(E e)   返回值：int
         *
         * 作用：返回元素指定下标位，如果找不到，返回-1
         */
       int threeIndex=listlinked.indexOf("庵汤");
       //调用父级List的indexOf方法  多态

        System.out.println("通过指定元素获取下标位"+threeIndex);
        /**
         * LastIndexOf(E e)   返回值：int
         * 作用：找到最后一个元素的位置，如果不存在，返回值-1
         *
         */
        int lastIndex=listlinked.lastIndexOf("螺狮粉");
        //调用子类实现类lastIndexOf方法
        System.out.println(""+lastIndex);
    }
    /**
     *  addFirst(E e)    返回值void
     *
     *  addFast(E e)    返回值void
     *  作用：将指定元素添加链接尾部
     *  removeFirst()
     *  removeFast()
     */
    @Test
    public void testLinkedList() {
        //创建集合对象；使用多态调用父类/子类的方法
        List<String> list = new LinkedList<>();
        list.add("欲火之路");
        list.add("749局");
        list.add("熊猫计划");
        //子类-LinkedList没有重写父类-List方法
        //多态---向下造型
        // ((LinkedList)list)将list对象强转子类LinkedList
        ((LinkedList) list).addFirst("抓娃娃");
        ((LinkedList) list).addLast("三生三世");
        System.out.println("LinkedList集合打印" + list);
        //需求：遍历LinkedList集合---Iterator迭代器
        //1，依赖Collection集合--List子集合接口---iterator()
        Iterator<String> it = list.iterator();

        //2.循环遍历，Iterator迭代器：问 取   【删，选择使用】
        while(it.hasNext()){//问：集合所有元素
            String str=it.next();//取：获取集合元素
            System.out.println("迭代器支持Collection接口下的所有类："+str);
        }
        //需求：删除LinkedList集合元素中：抓娃娃的元素
        //演示错误吗：LinkedList集合没有元素，删除LinkedList集合元素
        //NoSuchElementException 没有这个元素异常
        //产生原因：集合没有元素，删除首尾元素
        //list.clear();
        ((LinkedList)list).removeFirst();
        System.out.println("使用链表集合删除第一个元素："+list);
    }
}
